不同的變數類型之間並不是壁壘分明,井水不犯河水,比如在 Python 中 True/False
在與數值作加減運算的時候就會自動地被轉換為 1
與 0
,然而在一些不是這麼顯而易見的情況之下,就要仰賴手動進行變數類型的轉換,比方說我想要 Python 印出下列這句話會得到 TypeError。
days = 30
print("In order to become an ironman, you have to publish an article a day for " + days + " days in a row.")
我們在這段程式已經開始建立物件,在 Python 中將變數指派給物件的運算子是慣用的 =
,跟 R 語言慣用的 <-
有所區別,當然 R 語言也接受使用 =
作為指派的運算子,但是在寫作風格上絕大多數的 R 語言使用者還是偏愛 <-
。
Python 具備很便利的指派運算子像是:+=
,-=
,*=
,/=
,%/
讓我們的程式更簡潔,像是這段程式:
days = 30
days = days + 3
days # 33
其中的 days = days + 3
可以寫作 days += 3
。
days = 30
days += 3
days # 33
這些指派運算子在 R 語言是沒有辦法使用的,所以這樣的寫法其實對我而言是陌生的,所以我多寫了幾行感受一下。
days = 30
days += 3
print(days) # 33
days -= 3
print(days) # 30
days *= 5
print(days) # 150
days /= 5
print(days) # 30.0
days %= 7
print(days) # 2.0
練習了建立物件後,接著我們回歸正題,看一下 R 語言如何轉換變數類型,然後再研究 Python。
在 R 語言透過 paste()
函數不需要做變數類型的轉換就可以完成在 Python 得到 TypeError 的那個例子。
days <- 30
paste("In order to become an ironman, you have to publish an article a day for", days, "days in a row.")
R 語言轉換變數類型的函數都是以 as.
作為開頭然後將要轉換為的變數類型接於後面,方便我們記憶。
as.numeric()
:轉換變數類型為 numericas.integer()
:轉換變數類型為 integeras.complex()
:轉換變數類型為 complexas.logical()
:轉換變數類型為 logicalas.character()
:轉換變數類型為 character我們利用最有彈性的邏輯值來展示這幾個函數的功能。
my_logical <- TRUE
class(my_logical) # "logical"
as.numeric(my_logical) # 1
as.integer(my_logical) # 1
as.complex(my_logical) # 1+0i
as.character(my_logical) # "TRUE"
轉換變數類型的函數也不是萬能,比如說 as.integer("TRUE")
不會成功,想要將 "TRUE"
轉換為整數就要使用兩次轉換類型的函數 as.integer(as.logical("TRUE"))
。
透過 str()
函數就可以修正先前碰到的 TypeError 問題。
days = 30
print("In order to become an ironman, you have to publish an article a day for " + str(days) + " days in a row.")
Python 轉換變數類型的函數:
float()
:轉換變數類型為 floatint()
:轉換變數類型為 intcomplex()
:轉換變數類型為 complexbool()
:轉換變數類型為 boolstr()
:轉換變數類型為 str我們利用最有彈性的布林值來展示這幾個函數的功能。
my_bool = True
print(type(my_bool)) # 'bool'
print(float(my_bool)) # 1.0
print(int(my_bool)) # 1
print(complex(my_bool)) # 1+0j
print(type(str(my_bool))) # 'str'
跟 R 語言相同,轉換變數類型的函數也不是萬能,比如說 int("True")
不會成功,想要將 "True"
轉換為整數就要使用兩次轉換類型的函數 int(bool("True"))
。
第三天我們藉由練習 Python 的指派運算子暖身,然後研究 Python 轉換變數類型的函數,並且跟 R 語言轉換變數類型的函數相互對照。
同步刊登於 Github:https://github.com/yaojenkuo/learn_python_for_a_r_user